package com.zys.asseter.mapper;

import com.zys.asseter.domain.dto.AssetFingerprintDTO;
import com.zys.asseter.domain.dto.AssetUpdateCountDto;
import com.zys.asseter.domain.pojo.AssetFingerprintInfoEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface AssetFingerprintInfoMapper {
    /**
     * 将资产表中的数据同步到指纹表
     */
    void insertDataFromAssetInfoToFingerInfo();


    /**
     * 根据资产名称和资产子类型查询指纹名称
     */
    List<String> selectFingerName(@Param("assetType") String assetType, @Param("assetSubType") String assetSubType);


    /**
     * 根据指纹名删除指纹信息
     * @param id
     */
    void deleteById(@Param("id") String id);


    /**
     * 资产表新增一条数据的时候判断对应的指纹在指纹表中是否存在
     */
    Integer judgeFingerInfo(String code);


    /**
     * 根据厂商查询指纹信息
     * @param manufacturer
     * @return
     */
    List<String> selectByManufacturer(@Param("manufacturer") String manufacturer);


    /**
     * 查询所有厂商
     * @return
     */
    List<String> selectManufacturer();

    /**
     * 根据model_id统计资产数量
     *
     * @param  assetTypeId
     * @return 满足条件的资产数量
     */
    long countAssetsByModelId(@Param("assetTypeId") String assetTypeId);


    /**
     * 根据大类查询大类对应的资产model_id
     * @param assetType
     * @return
     */
    String selectAssetTypeID(@Param("assetType") String assetType);


    /**
     * 根据分类查询指纹表对应的分类code
     * @param assetSubType
     */
     String selectSubTypeCode(@Param("assetSubType") String assetSubType);

    /**
     * 根据分类的code查询资产表中分类的数量
     * @param assetSubTypeCode
     */
    Long countBySubTypeCode(@Param("id") String id, @Param("code") String assetSubTypeCode);

    /**
     * 查询厂商对应的资产表数量
     * @param manufacturer
     * @return
     */
    long countByManufacturer(@Param("manufacturer") String manufacturer);


    /**
     * 根据厂商查询厂商编码
     * @param manufacturer
     * @return
     */
    String selectManufacturerCode(@Param("manufacturer") String manufacturer);

    AssetFingerprintInfoEntity getByName(String name);


    List<AssetFingerprintInfoEntity> selectAllTypes();


    List<AssetFingerprintInfoEntity> ConditionPageQuery(@Param("fingerName") String fingerName, @Param("manufacturer") String manufacturer);

    /**
     * 清空asset_fingerprint_info表
     */
    void truncateTable();

    Integer countAssetsByFingerCode(@Param("fingerNameCode") String fingerNameCode);

    String selectMCode(@Param("manufacturer") String manufacturer);


    String selectMoCode(String model);

    String selectBrCode(String brand);

    String selectId(String assetType);

    void insertFingerInfo(AssetFingerprintInfoEntity e);

    Integer judge(AssetFingerprintDTO fingerInfo);


    Integer countDomainUsage(@Param("domain") String domainAddress);

    void updateDomainTimes(@Param("domainAddress") String domainAddress, @Param("count") String count);

    void updateIcpTimes(@Param("name") String name, @Param("count") String count);

    Integer CountByType(@Param("name") String name, @Param("type") String type);

    List<AssetUpdateCountDto> selectDomainIcp();
}
